package com.smart.community.community.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.smart.community.commons.base.IBaseMapper;
import com.smart.community.community.entity.Community;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 社区Mapper接口
 * 
 * @author Wu.Liang
 * @since 2024-12-19
 * @version 1.0.0
 */
@Mapper
public interface CommunityMapper extends IBaseMapper<Community> {
    
    /**
     * 分页查询社区
     * 
     * @param page          分页对象
     * @param communityName 社区名称
     * @param communityCode 社区编码
     * @param regionId      区域ID
     * @param communityType 社区类型
     * @param status        状态
     * @param keyword       关键词(社区名称、地址)
     * @return 社区分页列表
     */
    IPage<Community> selectCommunityPage(Page<Community> page,
                                        @Param("communityName") String communityName,
                                        @Param("communityCode") String communityCode,
                                        @Param("regionId") Long regionId,
                                        @Param("communityType") Integer communityType,
                                        @Param("status") Integer status,
                                        @Param("keyword") String keyword);
    
    /**
     * 根据区域ID查询社区列表
     * 
     * @param regionId 区域ID
     * @return 社区列表
     */
    List<Community> selectByRegionId(@Param("regionId") Long regionId);
    
    /**
     * 根据负责人姓名查询社区
     * 
     * @param managerName 负责人姓名
     * @return 社区列表
     */
    List<Community> selectByManagerName(@Param("managerName") String managerName);
    
    /**
     * 根据社区编码查询社区
     * 
     * @param communityCode 社区编码
     * @return 社区信息
     */
    Community selectByCommunityCode(@Param("communityCode") String communityCode);
    
    /**
     * 查询所有启用的社区
     * 
     * @param communityType 社区类型
     * @return 社区列表
     */
    List<Community> selectEnabledCommunities(@Param("communityType") Integer communityType);
    
    /**
     * 统计社区数量
     * 
     * @param communityType 社区类型
     * @param regionId 区域ID
     * @return 社区数量
     */
    Long countCommunities(@Param("communityType") Integer communityType,
                         @Param("regionId") Long regionId);
    
    /**
     * 更新社区统计信息
     * 
     * @param communityId    社区ID
     * @param buildingCount  楼栋数量
     * @param householdCount 住户数量
     * @param parkingCount   停车位数量
     * @return 影响行数
     */
    int updateStatistics(@Param("communityId") Long communityId,
                        @Param("buildingCount") Integer buildingCount,
                        @Param("householdCount") Integer householdCount,
                        @Param("parkingCount") Integer parkingCount);
    
    /**
     * 批量删除社区
     * 
     * @param communityIds 社区ID列表
     * @return 影响行数
     */
    int deleteBatchByIds(@Param("communityIds") List<Long> communityIds);
}
